package com.efuture.chaptersix

/* @Description: Kotlin语言范型约束
 * @Auther: zhaoshanshan
 * @Date: 2022/03/08/12:59 下午
 */

open class Demo99Any( name:String)//祖宗类
open class Demo99Test1( name:String):Demo99Any(name) //父类
open class Demo99Test2( name:String):Demo99Test1(name)//子类
class Demo99Test3( name:String)//另类


//T:Demo99Test1 范型约束 相当与 java的 T extends Demo99Test1 只能传入Demo99Test1以及其子类
class Demo99<T:Demo99Test1>(private val inputType:T, private val flag:Boolean=true){
    fun getObj()=inputType.takeIf { flag }
}

fun main() {

    //println(Demo99(Demo99Any("赵山山")).getObj()) 不能使用 有范型约束
    println(Demo99(Demo99Test1("赵山山")).getObj())
    println(Demo99(Demo99Test2("赵山山")).getObj())
    //println(Demo99(Demo99Test3("赵山山")).getObj())//不能使用 有范型约束

}
    